package com.tsj.spzx.controller;

import com.github.pagehelper.PageInfo;
import com.tsj.spzx.log.annotation.Log;
import com.tsj.spzx.model.dto.system.SysRoleDto;
import com.tsj.spzx.model.entity.system.SysRole;
import com.tsj.spzx.model.vo.common.Result;
import com.tsj.spzx.model.vo.common.ResultCodeEnum;
import com.tsj.spzx.service.SysRoleService;
import org.junit.jupiter.api.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

@CrossOrigin(allowCredentials = "true" , originPatterns = "*" , allowedHeaders = "*")
@RestController
@Tag("角色信息接口")
@RequestMapping("/admin/system/sysRole")
public class SysRoleController {

    @Autowired
    private SysRoleService sysRoleService;

    /**
     * 分页查询获取角色列表信息
     * @param current  当前页码
     * @param limit    每页的数量
     * @param sysRoleDto 查询条件（角色名称 封装到这个实体类中了）
     * @return
     */
    @PostMapping("/findByPage/{current}/{limit}")
    public Result findByPage(@PathVariable("current") Integer current,
                             @PathVariable("limit") Integer limit,
                             @RequestBody SysRoleDto sysRoleDto){
        PageInfo<SysRole> pageInfo = sysRoleService.findByPage(current,limit,sysRoleDto);
        return Result.build(pageInfo, ResultCodeEnum.SUCCESS);
    }

    /**
     * 添加角色信息
     * @param sysRole  前端传来的角色的信息
     * @return
     */
    @Log(title = "角色管理", businessType = 1)
    @PostMapping("/saveSysRole")
    public Result saveSysRole(@RequestBody SysRole sysRole){
        sysRoleService.saveSysRole(sysRole);
        return Result.build(null, ResultCodeEnum.SUCCESS);
    }

    /**
     * 修改用户信息
     * @param sysRole
     * @return
     */
    @PutMapping("/updateSysRole")
    public Result updateSysRole(@RequestBody SysRole sysRole){
        System.out.println(sysRole);
        sysRoleService.updateSysRole(sysRole);
        return Result.build(null, ResultCodeEnum.SUCCESS);
    }

    /**
     * 根据id删除角色信息
     * @param id
     * @return
     */
    @DeleteMapping("/deleteById/{id}")
    public Result deleteSysRole(@PathVariable("id") Long id){
        sysRoleService.deleteSysRole(id);
        return Result.build(null, ResultCodeEnum.SUCCESS);
    }

    /** 为用户分配角色
     * 查询出所有角色信息
     * 回显用户已分配角色
     * @return
     */
    @GetMapping("/findAllRoles/{userId}")
    public Result findAllRoles(@PathVariable("userId") Long userId){
        // 用map集合的目的： 1、封装所有角色信息    2、封装某一用户用户已分配角色信息 用于回显
        // 因为点击按钮后所有角色信息 和 用户已分配角色信息 是一起显示的
        Map<String, Object> roleMap = sysRoleService.findAllRoles(userId);
        return Result.build(roleMap, ResultCodeEnum.SUCCESS);
    }
}
